16 斑马智行-全部
> Last Format Time:6/12/2026 21:03:57
6/12/26 【理由】原文将「一面」「二面」「React Server Components」并列写成 H1,违反 H1 唯一原则。 原内容:# 一面 / # 二面 / # React Server Components
一面
提问
有关js、css、react、vue的一些问题,记不清了,很基础,全是八股文:
- css样式优先级
- vue中computed与watch的区别
- 移动端适配
反问
- agent落地情况:似乎没有
- 目前编程的情况:手动编程(古法编程)
看样子主要的技术栈是Vue
二面
一面完事,马上就二面了,如果有offer那我就接着
问的就是具体的业务了:
- 字节的项目经历
- 移动端适配
- Agent开发的具体实现
- 有关长线运行的Agent会改乱仓库的情况
- 有关服务端推给前端一个结构,可能是xml也可能是其他的结构,然后前端使用基础的组件来拼装页面的新技术 应该是RSC
反问
我靠了,他居然没让我反问,何意味,看来有戏,但是最好是实习6个月,这他妈的。。。 反问:
- 我们是日常实习,有可能转正吗?
- 我们的具体业务是什么呢?
- 日常实习生能够做什么呢,能否学习到真正有价值的东西呢?
React Server Components
React Server Components(简称 RSC,服务端组件)是 React 架构的一次重大革新。简单来说,它允许 React 组件完全在服务端(Server)运行和渲染,而无需将组件的 JavaScript 代码发送到浏览器。
在传统的 React 开发中,所有的组件逻辑、依赖库都需要打包成 JS 文件下发给浏览器,由浏览器解析执行。而 RSC 改变了这一现状,它把"重"的计算、数据的获取都留在了服务端,只把渲染好的结果交给客户端。
以下是 RSC 的核心特点、优势以及它与传统渲染方式的区别:
RSC 的核心优势
- 零客户端体积(Zero Bundle Size) 如果你在 RSC 中使用了体积庞大的第三方库(比如用来解析 Markdown 的
marked或处理日期的库),这些库的 JS 代码永远不会被发送到客户端。它们只在服务端运行,极大减轻了浏览器的下载和解析负担。 - 直接访问后端资源 RSC 允许你直接在组件内部编写数据库查询、读取服务器文件系统或调用内部微服务。你不再需要为了获取数据而专门写一套
API接口,大大简化了开发流程。 - 更优的初始加载体验 RSC 配合流式渲染(Streaming),可以让浏览器边接收数据边渲染页面。相比传统方式需要等待所有 JS 下载完才能交互,RSC 能让用户更快看到页面内容,减少白屏时间。
服务端组件 (RSC) vs 客户端组件 (Client Components)
在 RSC 架构下,React 组件被明确划分为了两种类型。在现代框架(如 Next.js)中,默认所有组件都是服务端组件。
| 特性 | 服务端组件 (RSC) | 客户端组件 (Client Components) |
|---|---|---|
| 执行位置 | 仅在服务端 | 浏览器 (客户端) |
| 代码打包 | 不打包进客户端 JS | 打包并发送到客户端 |
| 数据获取 | 可直接查询数据库/文件系统 | 需通过 API 请求 (fetch/axios) |
| 交互能力 | 不支持 (onClick 等无效) | 支持完整交互与事件监听 |
| React Hooks | 不支持 (useState, useEffect) | 支持所有 Hooks |
| 声明方式 | 默认 (无需特殊标记) | 需在文件顶部添加 'use client' |
代码实战演示
服务端组件 (默认)
可以直接在组件里进行异步数据库查询,且引入的大型依赖不会增加前端体积:
import { db } from '@/lib/db';
import marked from 'marked'; // 这个库只留在服务端,不会下发给浏览器
export default async function ArticlePage({ params }) {
// 直接在组件内异步获取数据
const article = await db.article.findUnique({ where: { id: params.id } });
const htmlContent = marked(article.content);
return (
<article>
<h1>{article.title}</h1>
<div dangerouslySetInnerHTML={{ __html: htmlContent }} />
</article>
);
}
客户端组件 (需声明 'use client')
当页面需要点击、输入框、倒计时等交互时,就需要使用客户端组件:
'use client'; // 必须显式声明
import { useState } from 'react';
export function LikeButton() {
const [likes, setLikes] = useState(0);
return (
<button onClick={() => setLikes(likes + 1)}>
❤️ {likes}
</button>
);
}
总结与补充
RSC 并不是要完全取代传统的 SSR(服务端渲染)或 CSR(客户端渲染),而是将两者的优势结合了起来。它把**"展示和数据获取"交给服务端,把"交互和状态管理"**交给客户端。
目前,Next.js (App Router) 是对 RSC 支持最成熟的主流框架,它默认采用 RSC 架构来构建应用。掌握 RSC 的核心在于学会**"何时使用服务端组件,何时切换到客户端组件"**,从而在性能和交互体验之间找到最佳平衡。
我他妈的,两个面试都过了,最后的hr给我挂了,因为我去的太晚了,666